package 寒假刷题;

public class 统计按位或能得到最大值的子集数目 {
    public int countMaxOrSubsets(int[] nums) {
        int max = 0;
        for (int num : nums) {
            max |= num;
        }
       return dfs(0,nums,0,max);
    }

    private int dfs(int curIndex, int[] nums, int curValue, int max) {
        if (curIndex==nums.length)
            return curValue==max?1:0;
        //可以与下一个相或，也可以不相或
        return dfs(curIndex+1,nums,curValue | nums[curIndex],max)+dfs(curIndex+1,nums,curValue,max);
    }
}
